home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / DOS.SWG / 0060_Environment detection.pas < prev    next >
Pascal/Delphi Source File  |  1994-08-24  |  5KB  |  208 lines

  1.  
  2. {
  3. Answering a msg of <Thursday May 19 1994>, from Elad Nachman to Per-Eric
  4. Larsson:
  5. }
  6.  
  7. program environ;
  8.  
  9. uses dos,crt;
  10.  
  11. Const
  12.   Multiplex = $2f;
  13.   std_dos   = $21;
  14.  
  15.  
  16. var
  17.   regs        : registers;
  18.   {windows information variables}
  19.   winstall    : boolean;
  20.   hi_winver   : integer;
  21.   lo_winver   : integer;
  22.   _386enh     : boolean;
  23.   Ver_mach    : word;
  24.   {OS information Variables}
  25.   _4dosinst    : boolean;
  26.   Hi_4d_ver   : integer;
  27.   Lo_4d_ver   : integer;
  28.   shell_num   : integer;
  29.   Hi_dosver   : integer;
  30.   Lo_dosver   : integer;
  31.   {DesqView Information variables}
  32.   dv_inst     : boolean;
  33.   Hi_dv_ver   : integer;
  34.   Lo_dv_ver   : integer;
  35.  
  36.  
  37.  procedure v_id; {return windows 3.x 386enh mode virtual machine number}
  38.  
  39.    begin
  40.      regs.ax:=$1638;
  41.      intr(multiplex,regs);
  42.      ver_mach := regs.bx;
  43.    end;
  44.  
  45.  procedure winstal;{check for windows 3.x install}
  46.  
  47.    begin
  48.      regs.ax:=$160A;
  49.      intr(multiplex,regs);
  50.      if regs.ax = $0000 then
  51.        begin
  52.          winstall  := true;
  53.          Hi_winver := regs.bh;
  54.          lo_winver := regs.bl;
  55.          if regs.cx = $0003 then
  56.            begin
  57.              _386enh := true;
  58.              v_id;
  59.            end
  60.          else
  61.            begin
  62.              _386enh := false;
  63.              ver_mach := 0;
  64.            end;
  65.        end
  66.       else
  67.         begin
  68.           {
  69.             this point is only reached if windows isNOT
  70.             detected we therefore set ALL windows id vars
  71.             to impossible numbers.
  72.           }
  73.           winstall  := false;
  74.           Hi_winver := 0;
  75.           lo_winver := 0;
  76.           ver_mach  := 0;
  77.         end;
  78.    end;
  79.  
  80.   procedure dvinstall;{check for dv}
  81.  
  82.     begin
  83.       if winstall then
  84.         begin
  85.           dv_inst := false;
  86.           exit;
  87.         end;
  88.       regs.ax := $2b00;
  89.       regs.cx := $4445;
  90.       regs.dx := $5351;
  91.       regs.ax := $0001;
  92.       intr(std_dos,regs);
  93.       if regs.al<>$ff then
  94.         begin
  95.           hi_dv_ver := regs.bh;
  96.           lo_dv_ver := regs.bl;
  97.           dv_inst   := true;
  98.         end
  99.       else
  100.         begin
  101.           Hi_dv_ver := 0;
  102.           Lo_dv_ver := 0;
  103.           dv_inst   := false;
  104.         end;
  105.     end; { dv install check}
  106.  
  107.   procedure I_4dos;
  108.  
  109.     begin
  110.       regs.ax := $d44d;
  111.       regs.bx := $0000;
  112.       intr(std_dos,regs);
  113.       if regs.ax = $44dd then
  114.         begin
  115.           hi_4d_ver := regs.bh;
  116.           lo_4d_ver := regs.bl;
  117.           _4dosinst  := true;
  118.           shell_num := regs.dl;
  119.         end
  120.       else
  121.         begin { no 4dos }
  122.           _4dosinst  := false;
  123.           hi_4d_ver := 0;
  124.           lo_4d_ver := 0;
  125.           shell_num := -1;
  126.         end;
  127.     end;
  128.  
  129.   procedure dos_ver; {get dos version}
  130.  
  131.     begin
  132.       regs.ax:=$3001;
  133.       intr(std_dos,regs);
  134.       hi_dosver:=regs.al;
  135.       lo_dosver:=regs.ah;
  136.     end;
  137.  
  138.   procedure display_info;
  139.     begin
  140.       clrscr;
  141.       gotoxy(4,5);
  142.       writeln('Os information');
  143.       gotoxy(4,12);
  144.       writeln('Windows 3.x information');
  145.       gotoxy(4,17);
  146.       writeln('Dv information');
  147.       if _4dosinst then
  148.         begin
  149.           gotoxy(6,7);
  150.           writeln('4dos version: ',hi_4d_ver,':',lo_4d_ver);
  151.           gotoxy(6,8);
  152.           writeln('4dos subshell#: ',shell_num);
  153.           gotoxy(6,9);
  154.           writeln('MSdos version: ',hi_dosver,':',lo_dosver);
  155.         end
  156.       else
  157.         begin
  158.           gotoxy(6,7);
  159.           writeln('MSdos version: ',hi_dosver,':',lo_dosver);
  160.           gotoxy(6,8);
  161.           writeln('4dos.com not detected in this window.');
  162.         end;
  163.       if winstall then
  164.         begin
  165.           gotoxy(6,13);
  166.           writeln('Windows Version: ',Hi_winver,':',lo_winver);
  167.           gotoxy(6,14);
  168.           if _386enh then
  169.             begin
  170.               writeln('Running in 386 enhanced mode');
  171.               gotoxy(6,15);
  172.               writeln('386Enh virtual machine ID: ',ver_mach);
  173.             end
  174.           else
  175.             begin
  176.               writeln('Running in Standard mode');
  177.               gotoxy(6,15);
  178.               writeln('386Enh Virtual Machine ID: Not applicable in standard mode');
  179.             end;
  180.           end
  181.         else
  182.           begin
  183.             gotoxy(6,13);
  184.             writeln('Microsoft windows not installed');
  185.           end;
  186.       if dv_inst then
  187.         begin
  188.           gotoxy(6,18);
  189.           writeln('Desqview Version: ',hi_dv_ver,':',lo_dv_ver);
  190.         end
  191.       else
  192.         begin
  193.           gotoxy(6,18);
  194.           writeln('DesqView not installed');
  195.         end;
  196.     end;
  197.  
  198.   begin
  199.     winstal;
  200.     I_4dos;
  201.     dos_ver;
  202.     dvinstall;
  203.     display_info;
  204.     repeat
  205.     until readkey = #27;
  206.   end.
  207.  
  208.